import org.keplerproject.luajava.LuaException;
import org.keplerproject.luajava.LuaObject;
import org.keplerproject.luajava.LuaState;
import org.keplerproject.luajava.LuaStateFactory;


public class Test01 {  
  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
          
        LuaState L = LuaStateFactory.newLuaState();  
        // 加载lua标准库,否则一些lua基本函数无法使用  
        L.openLibs();  
        // doFile  
        L.LdoFile("res/function.lua");  
          
        //---------------------------------------------值传递测试  
        // 找到函数 sum  
        L.getField(LuaState.LUA_GLOBALSINDEX, "sum");  
          
        // 参数1压栈  
        L.pushNumber(100);  
          
        // 参数2压栈  
        L.pushNumber(50);  
          
        // 调用，共2个参数1个返回值  
        L.call(2, 1);  
          
        // 保存返回值到result中  
        L.setField(LuaState.LUA_GLOBALSINDEX, "result");  
          
        // 读入result  
        LuaObject lobj = L.getLuaObject("result");  
        // 打印结果   
        System.out.println(lobj.getNumber());  
          
        //---------------------------------------------对象传递测试  
        Value v = new Value();  
          
        L.getField(LuaState.LUA_GLOBALSINDEX, "test1");  
          
        try {  
            L.pushObjectValue(v);  
        } catch (LuaException e) {  
            e.printStackTrace();  
        }  
          
        L.call(1, 0);  
          
        v.print();  
        
        L.getField(LuaState.LUA_GLOBALSINDEX, "test2");
        try {
			L.pushObjectValue(new JavaLuaTest());
		} catch (Exception e) {
			e.printStackTrace();
		}
        L.call(1, 0);
    }  
  
}  
  
class Value {  
    private int i;  
      
    public void init(){  
        i = 111;  
    }  
      
    public void print(){  
        System.out.println(i);  
    }  
      
}  
